iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0

我們時常呼叫自定義的Dialog,若是這些Dialog沒有更動資料,只是單純顯示或消失,建議可以寫到另外的class中
未命名


DialogData

建構元:

private Dialog backDialog,exitDialog;
    private Activity activity;
    public DialogData(Activity activity){
        this.activity = activity;
    }

單按鈕對話框

  • showBackDialog():
public void showBackDialog(String mes) {
        backDialog = new Dialog(activity);
        backDialog.setContentView(R.layout.back_dialog_item);

        TextView tv_title = backDialog.findViewById(R.id.tv_title);
        Button btn_cancel = backDialog.findViewById(R.id.btn_back);
        ImageView img_chess_link = backDialog.findViewById(R.id.img_chess_link);
        try {
            ImageDecoder.Source source = ImageDecoder.createSource(activity.getResources(),R.drawable.chess_link);
            Drawable drawable = ImageDecoder.decodeDrawable(source);
            img_chess_link.setImageDrawable(drawable);
            if(drawable instanceof Animatable){
                Animatable animatable = (Animatable) img_chess_link.getDrawable();
                animatable.start();
            }
        }catch (Exception e){
            e.printStackTrace();
        }

        tv_title.setText(mes);
        if(!activity.isFinishing()){
            btn_cancel.setOnClickListener(v -> {
                if(!activity.isFinishing()){
                    backDialog.dismiss();
                    activity.finish();
                }
            });

            backDialog.setCancelable(false);
            backDialog.setCanceledOnTouchOutside(false);
            backDialog.show();
        }
    }
  • dismissBackDialog():
public void dismissBackDialog(){
        if(backDialog != null){
            backDialog.dismiss();
        }
    }
  • layout:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="300dp"
    android:layout_height="200dp"
    android:layout_gravity="center"
    android:background="@drawable/brownbackground_grayline">

    <ImageView
        android:id="@+id/img_chess_link"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:src="@drawable/chess_link"
        app:layout_constraintBottom_toTopOf="@+id/guideline36"
        app:layout_constraintEnd_toStartOf="@+id/guideline29"
        app:layout_constraintStart_toStartOf="@+id/guideline31"
        app:layout_constraintTop_toTopOf="@+id/guideline35" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline29"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.6" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline31"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.4" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline35"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.1" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline36"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.4" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline79"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.65" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline82"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.95" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline83"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.7" />

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/brownline"
        android:gravity="center"
        android:text=""
        android:textColor="@color/black"
        android:textStyle="bold"
        app:layout_constraintBottom_toTopOf="@+id/guideline79"
        app:layout_constraintEnd_toStartOf="@+id/guideline91"
        app:layout_constraintStart_toStartOf="@+id/guideline28"
        app:layout_constraintTop_toTopOf="@+id/guideline36" />

    <Button
        android:id="@+id/btn_back"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/redbackground_blackline"
        android:text="退出"
        android:textColor="@color/white"
        android:textStyle="bold"
        android:gravity="center"
        app:backgroundTint="@null"
        app:layout_constraintBottom_toTopOf="@+id/guideline82"
        app:layout_constraintEnd_toStartOf="@+id/guideline91"
        app:layout_constraintStart_toStartOf="@+id/guideline28"
        app:layout_constraintTop_toTopOf="@+id/guideline83" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline28"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.1" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline91"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.9" />

</androidx.constraintlayout.widget.ConstraintLayout>

2個按鈕對話框

  • showExitDialog():
public void showExitDialog(String mes,String leftText,String rightText){
        exitDialog = new Dialog(activity);
        exitDialog.setContentView(R.layout.exit_dialog_item);

        TextView tv_title = exitDialog.findViewById(R.id.tv_title);
        Button btn_left = exitDialog.findViewById(R.id.btn_left);
        Button btn_right = exitDialog.findViewById(R.id.btn_right);
        ImageView img_chess_setting = exitDialog.findViewById(R.id.img_door);
        btn_left.setText(leftText);
        btn_right.setText(rightText);
        try {
            ImageDecoder.Source source = ImageDecoder.createSource(activity.getResources(),R.drawable.door);
            Drawable drawable = ImageDecoder.decodeDrawable(source);
            img_chess_setting.setImageDrawable(drawable);
            if(drawable instanceof Animatable){
                Animatable animatable = (Animatable) img_chess_setting.getDrawable();
                animatable.start();
            }
        }catch (Exception e){
            e.printStackTrace();
        }

        tv_title.setText(mes);
        btn_right.setOnClickListener(v -> {
            if(!activity.isFinishing()){
                exitDialog.dismiss();
            }
        });

        btn_left.setOnClickListener(v -> {
            if(!activity.isFinishing()){
                exitDialog.dismiss();
                activity.finish();
            }
        });

        exitDialog.setCancelable(false);
        exitDialog.setCanceledOnTouchOutside(false);
        exitDialog.show();
    }
  • dismissExitDialog():
public void dismissExitDialog(){
        if(exitDialog != null){
            exitDialog.dismiss();
        }
    }
  • layout:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="300dp"
    android:layout_height="200dp"
    android:layout_gravity="center"
    android:background="@drawable/brownbackground_grayline">

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline80"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.35" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline81"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.65" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline118"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.95" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline119"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.7" />

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/brownline"
        android:gravity="center"
        android:text=""
        android:textColor="@color/black"
        android:textStyle="bold"
        app:layout_constraintBottom_toTopOf="@+id/guideline81"
        app:layout_constraintEnd_toStartOf="@+id/guideline130"
        app:layout_constraintStart_toStartOf="@+id/guideline120"
        app:layout_constraintTop_toTopOf="@+id/guideline80" />

    <Button
        android:id="@+id/btn_right"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/redbackground_blackline"
        android:text=""
        android:textColor="@color/white"
        android:textStyle="bold"
        android:gravity="center"
        app:backgroundTint="@null"
        app:layout_constraintBottom_toTopOf="@+id/guideline118"
        app:layout_constraintEnd_toStartOf="@+id/guideline130"
        app:layout_constraintStart_toStartOf="@+id/guideline131"
        app:layout_constraintTop_toTopOf="@+id/guideline119" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline120"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.1" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline130"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.9" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline131"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.5" />

    <Button
        android:id="@+id/btn_left"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/redbackground_blackline"
        android:text=""
        android:textColor="@color/white"
        android:textStyle="bold"
        android:gravity="center"
        app:backgroundTint="@null"
        app:layout_constraintBottom_toTopOf="@+id/guideline118"
        app:layout_constraintEnd_toStartOf="@+id/guideline131"
        app:layout_constraintStart_toStartOf="@+id/guideline120"
        app:layout_constraintTop_toTopOf="@+id/guideline119" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline132"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.05" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline133"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.4" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline134"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.6" />

    <ImageView
        android:id="@+id/img_door"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:src="@drawable/door"
        app:layout_constraintBottom_toTopOf="@+id/guideline80"
        app:layout_constraintEnd_toStartOf="@+id/guideline134"
        app:layout_constraintStart_toStartOf="@+id/guideline133"
        app:layout_constraintTop_toTopOf="@+id/guideline132" />
</androidx.constraintlayout.widget.ConstraintLayout>

其中我們使用到將.gif檔嵌入的方法,需要先在drawable中加入.gif檔
未命名
加入後我們就可在ImageView中設置src,並在程式碼中加入:

try {
            ImageDecoder.Source source = ImageDecoder.createSource(activity.getResources(),R.drawable.door);
            Drawable drawable = ImageDecoder.decodeDrawable(source);
            img_chess_setting.setImageDrawable(drawable);
            if(drawable instanceof Animatable){
                Animatable animatable = (Animatable) img_chess_setting.getDrawable();
                animatable.start();
            }
        }catch (Exception e){
            e.printStackTrace();
        }

這樣就可以讓.gif檔動起來了


上一篇
【DAY 08】firebase - DatabasePresenter & DatabaseContract - 對接接口
下一篇
【DAY 10】activity - MainActivity & layout
系列文
基於Firebase整合生成式AI研究開發雙人國際象棋系統(Based on Firebase and AI to research chess system)30
.
圖片
  直播研討會

尚未有邦友留言

立即登入留言